package com.project_doctor.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 医生信息表
 * @TableName t_doctor
 */
@TableName(value ="t_doctor")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Doctor {
    /**
     * 医生唯一ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 医生头像URL
     */
    private String avatar;

    /**
     * 医生姓名
     */
    private String name;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 登录密码
     */
    private String password;

    /**
     * 所属团队ID
     */
    @TableField("team_id")
    private Integer teamId;

    /**
     * 所属机构ID
     */
    @TableField("inst_id")
    private Integer instId;

    /**
     * 预留字段1 - 医生工号
     */
    private String reserved1;

    /**
     * 预留字段2 - 登录状态 (1=启用, 0=禁用)
     */
    private String reserved2;

    /**
     * 预留字段3 - 科室/部门
     */
    private String reserved3;

    /**
     * 原有状态字段 - 保持不变
     */
    private String status;

    /**
     * 状态更新时间
     */
    @TableField("update_time")
    private Date updateTime;

    // ========== 登录系统相关的便捷方法 ==========

    /**
     * 获取医生工号
     */
    public String getDoctorNo() {
        return this.reserved1;
    }

    /**
     * 设置医生工号
     */
    public void setDoctorNo(String doctorNo) {
        this.reserved1 = doctorNo;
    }

    /**
     * 获取登录状态 (1=启用, 0=禁用)
     */
    public Integer getLoginStatus() {
        if (reserved2 == null || reserved2.isEmpty()) {
            return 1; // 默认启用
        }
        try {
            return Integer.parseInt(reserved2);
        } catch (NumberFormatException e) {
            return 1; // 解析失败默认启用
        }
    }

    /**
     * 设置登录状态
     */
    public void setLoginStatus(Integer loginStatus) {
        this.reserved2 = loginStatus != null ? loginStatus.toString() : "1";
    }

    /**
     * 获取科室/部门
     */
    public String getDepartment() {
        return this.reserved3;
    }

    /**
     * 设置科室/部门
     */
    public void setDepartment(String department) {
        this.reserved3 = department;
    }

    // ========== 关联对象 ==========

    /**
     * 医生角色信息 (非数据库字段)
     */
    @TableField(exist = false)
    private Role role;

    /**
     * 医生团队信息 (非数据库字段)
     */
    @TableField(exist = false)
    private Team team;
}